function mySetInterval (callback, delay) {
  // 先立即执行一次
  callback();

  const intervalId = setTimeout(() => {
    // 需要注意的是，这种⽅法并不能完全替代 setInterval ，因为 setTimeout 的延迟时间并不是精确的，它受到 JavaScript 事件循环和浏览器性能的影响。如果回调函数的执⾏时间超过了设定的延迟时间，那么 setTimeout 的实际触发时间就会⽐预期的要晚。这也是为什么我们在上⾯的代码中在每次调⽤ setTimeout 之前先清除前⼀个 setTimeout 的原因，以尽量避免这种累积的延迟。
    clearTimeout(intervalId);
    mySetInterval(callback, delay);
  }, delay);
}

mySetInterval(() => console.log('Hello, world!'), 1000)